import java.util.Arrays;

/*
 * @author zzr
 * @date: 2025/10/14  10:33
 * @description:
 */
public class MyStack {
    private int[] elem;
    private int usedSize;

    private static final int DEFAULT_CAPACITY = 10;

    /**
     * 默认的无参构造方式
     */
    public MyStack() {
        elem = new int[DEFAULT_CAPACITY];
    }

    /**
     * push 方法，将值 val 压入栈中
     * @param val
     */
    public void push(int val) {
        if (isFull()) {
            // 栈满 ==》 扩容
            elem = Arrays.copyOf(elem, elem.length*2);
        }
        elem[usedSize] = val;
        usedSize++;
    }

    private boolean isFull() {
        if (usedSize == elem.length) {
            return true;
        }
        return false;
    }

    /**
     * 将栈顶元素弹出，返回弹出的元素
     * 栈中的 pop 方法和 ArrayList 中的 remove 方法不同
     * ArrayList 中数据需要向后移动覆盖 栈弹出的是栈顶元素 不需要向后覆盖
     * 直接 usedSize-- 即可 让后面再入栈的元素覆盖即可
     * @return
     */
    public int pop(){
        if (isEmpty()) {
            System.out.println("栈为空");
            return -1;
        }
        int oldValue = elem[usedSize - 1];
        usedSize--;
        return oldValue;
    }

    private boolean isEmpty() {
        if (usedSize == 0) {
            return true;
        }
        return false;
    }


    /**
     * 返回栈顶元素
     * @return
     */
    public int peek() {
        if (isEmpty()) {
            System.out.println("栈为空");
            return -1;
        }
        return elem[usedSize - 1];
    }

}
